home *** CD-ROM | disk | FTP | other *** search
- /* rotate the digits of a number n with x place -r left +r right*/
-
- #include "defs.h"
-
- int am_rotate(int n, int r, int place)
- {
-
- int dig[]={0,0,0,0,0,0,0,0,0,0},dig2[10];
- int t=0,x=0,j=0,i;
-
- if(r==0)
- return n;
-
- if(n>999999999)
- return n;
- if(place<0)
- place = -place;
-
-
- if(place>9){
- for(i = 0; i < 9; i++)
- while(place >= _am_asciiconv[i])
- place -= _am_asciiconv[i];
- while(place >= _am_asciiconv[i])
- {
- place -= _am_asciiconv[i];
- j++;
- }
-
- place=j;
- j=0;
- }
-
- if(n<0){
- n = -n;
- x=1;
- }
-
- while(n >= _am_asciiconv[0])
- {
- n -= _am_asciiconv[0];
- dig[9]++;
- }
-
- while(n >= _am_asciiconv[1])
- {
- n -= _am_asciiconv[1];
- dig[8]++;
- }
-
-
- while(n >= _am_asciiconv[2])
- {
- n -= _am_asciiconv[2];
- dig[7]++;
- }
-
- while(n >= _am_asciiconv[3])
- {
- n -= _am_asciiconv[3];
- dig[6]++;
- }
-
- while(n >= _am_asciiconv[4])
- {
- n -= _am_asciiconv[4];
- dig[5]++;
- }
-
- while(n >= _am_asciiconv[5])
- {
- n -= _am_asciiconv[5];
- dig[4]++;
- }
-
- while(n >= _am_asciiconv[6])
- {
- n -= _am_asciiconv[6];
- dig[3]++;
- }
-
- while(n >= _am_asciiconv[7])
- {
- n -= _am_asciiconv[7];
- dig[2]++;
- }
-
- while(n >= _am_asciiconv[8])
- {
- n -= _am_asciiconv[8];
- dig[1]++;
- }
-
- dig[0]= n;
-
- if(r>0){
- for(j=0;j<place;j++)
- dig2[j]=dig[(j+r)-((j+r)/place)*place];
- }
- else if(r<0){
- for(j=0;j<place;j++)
- dig2[j]=dig[(j+r)+((place-j-r-1)/place)*place];
- }
-
- for(j=0;j<place;j++)
- t=t+dig2[j]*_am_asciiconv[9-j];
-
- if(x)
- return -t;
- else
- return t;
- }